package com.studyhub.message.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.studyhub.api.message.entity.NoticeMessageEntity;
import com.studyhub.api.message.vo.NoticeMessagePage;
import com.studyhub.api.message.vo.NoticeMessageQueryVO;
import com.studyhub.api.message.vo.NoticeMessageStatsVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * @Description 通知消息Mapper接口
 * @Author YWF
 * @Version 1.0.0
 * @Date 2025/9/26 10:40
 */
@Mapper
public interface NoticeMessageMapper extends BaseMapper<NoticeMessageEntity> {
    
    /**
     * 分页查询通知消息
     *
     * @param page 分页参数
     * @param queryVO 查询条件
     * @param userId 用户ID
     * @return 分页结果
     */
    IPage<NoticeMessagePage> selectNoticeMessagePage(
            Page<NoticeMessagePage> page, 
            @Param("query") NoticeMessageQueryVO queryVO, 
            @Param("userId") Long userId
    );
    
    /**
     * 获取用户的通知消息统计信息
     *
     * @param userId 用户ID
     * @return 统计信息
     */
    NoticeMessageStatsVO selectNoticeMessageStats(@Param("userId") Long userId);
    
    /**
     * 批量标记消息为已读
     *
     * @param messageIds 消息ID列表
     * @param userId 用户ID
     * @return 更新数量
     */
    int batchMarkAsRead(@Param("messageIds") java.util.List<Long> messageIds, @Param("userId") Long userId);
    
    /**
     * 标记所有未读消息为已读
     *
     * @param userId 用户ID
     * @return 更新数量
     */
    int markAllAsRead(@Param("userId") Long userId);
    
    /**
     * 物理删除消息
     *
     * @param messageIds 消息ID列表
     * @param userId 用户ID
     * @return 删除数量
     */
    int deleteByIds(@Param("messageIds") java.util.List<Long> messageIds, @Param("userId") Long userId);
}